home *** CD-ROM | disk | FTP | other *** search
Text File | 1987-08-29 | 3.2 KB | 96 lines | [TEXT/PJMM] |
- UNIT seer_glue;
- INTERFACE
- USES
- seer_interface, mac_os_globals, bomb;
- PROCEDURE configure_seer;
- PROCEDURE seer_on;
- PROCEDURE load_seer;
- PROCEDURE open_seer;
- IMPLEMENTATION
- PROCEDURE configure_seer;
- CONST
- sp_hq_size = 4000; {use x bytes for seer header queue}
- sp_dq_size = 10000; {use x bytes for seer data queue}
-
- VAR
- sp_header_q : Ptr; {seer header queue}
- sp_data_q : Ptr; {seer data queue}
- iqarg : SR_record; {init queue argument record}
- cs_ptr : Ptr; {a pointer to iqarg}
- err : integer;
- BEGIN
- sp_header_q := NewPtr(sp_hq_size); {allocate the header queue}
- sp_data_q := NewPtr(sp_dq_size); {allocate the data queue}
- iqarg.a_initq.dbufstart := screenBits.baseAddr; {where the data queue lives}
- iqarg.a_initq.dbuflen := 20000; {how big the data queue is}
- iqarg.a_initq.hbufstart := sp_header_q; {where the header queue lives}
- iqarg.a_initq.hbuflen := sp_hq_size; {how big the header queue is}
- cs_ptr := @iqarg;
- err := Control(seer_refnum, ord(SRc_initq), @cs_ptr);
- IF err <> noErr THEN
- bomb(bomb_noinitq, StringOf(err));
- WriteLn('initqarg err=', iqarg.SRe_error);
- END;
-
- PROCEDURE seer_on;
- VAR
- onarg : SR_record; {init queue argument record}
- cs_ptr : Ptr; {a pointer to iqarg}
- err : integer;
- BEGIN
- cs_ptr := @onarg;
- err := Control(seer_refnum, ord(SRc_on), @cs_ptr);
- IF err <> noErr THEN
- bomb(bomb_noon, StringOf(err));
- Write('SRc_on err=', onarg.SRe_error);
- END;
-
- {preform the seer load function, check its version, get a pointer to}
- {seer status block}
- PROCEDURE load_seer;
- VAR
- lodarg : SR_record;
- cs_ptr : Ptr;
- err : integer;
- BEGIN
- lodarg.a_load.major_version := SEER_MAJOR;
- {since Control only passed 22 bytes and SR_record may be longer}
- {at the argument to control is write only anyway, we pass a pointer to SR_record}
- {this pointer gets copied into a ParamBlockRec along with the csCode we pass}
- cs_ptr := @lodarg;
- err := Control(seer_refnum, ord(SRc_load), @cs_ptr);
- IF err <> noErr THEN
- bomb(bomb_noload, StringOf(err));
- {remember a pointer to the seer status block}
- sp_status := lodarg.a_load.status_pt;
- Write('loadarg err=', lodarg.SRe_error);
- WriteLn(' sp_status=', ord(sp_status));
- Write(' minor version=', lodarg.a_load.minor_version);
- Write(' header length=', lodarg.a_load.header_length);
- WriteLn(' data overhead=', lodarg.a_load.data_overhead);
- WriteLn;
- END;
-
- {open the seer device driver}
- PROCEDURE open_seer;
- LABEL
- 0; {exit}
- VAR
- err : integer; {a local error code}
- old_res_file : integer; {resource file current before seer_drvr}
- BEGIN
- IF seer_refnum <> 0 THEN {alreadyopen?}
- GOTO 0; {yes, nothing to do then}
- old_res_file := CurResFile; {remember so we can put current resource file back}
- seer_res_file := OpenResFile('seer_drvr'); {open the device driver resource file}
- IF seer_res_file = -1 THEN {find the resource file?}
- bomb(bomb_nodrvrfile, StringOf(ResError)); {no, belly up}
- UseResFile(seer_res_file); {may already be open, search it}
- err := OpenDriver('.seer', seer_refnum); {open the driver}
- IF err <> noErr THEN {find the resource file?}
- bomb(bomb_noopen, StringOf(err)); {no, belly up}
- UseResFile(old_res_file); {go back to the normal resource file}
- 0 :
- END;
-
- END.